Specify the tissue of interest, run the boilerplate code which sets up the functions and environment, load the tissue object.

tissue_of_interest = "Thymus"
library(here)
source(here("00_data_ingest", "02_tissue_analysis_rmd", "boilerplate.R"))
tiss <- load_tissue_facs(tissue_of_interest)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
[1] "Scaling data matrix"

  |                                                                                                 
  |                                                                                           |   0%
  |                                                                                                 
  |===========================================================================================| 100%
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************|

PCElbowPlot(object = tiss)

# Set number of principal components. 
n.pcs = 13
# Set resolution 
res.used <- 0.7
tiss <- FindClusters(object = tiss, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)
tiss <- RunTSNE(object = tiss, dims.use = 1:n.pcs, seed.use = 10, perplexity=30)
# note that you can set do.label=T to help label individual clusters
TSNEPlot(object = tiss, do.label = T)

# Batch and animal effects
TSNEPlot(object = tiss, do.return = TRUE, group.by = "plate.barcode")

TSNEPlot(object = tiss, do.return = TRUE, group.by = "mouse.id")

Check expression of genes of interset.

Dotplots let you see the intensity of expression and the fraction of cells expressing for each of your genes of interest.

How big are the clusters?

table(tiss@ident)

  0   1   2   3   4   5   6   7 
451 301 262 135  89  40  39  32 

Which markers identify a specific cluster?

#clust.markers <- FindMarkers(object = tiss, ident.1 = 3, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)
#print(x = head(x= clust.markers, n = 10))

Assigning cell type identity to clusters

At a coarse level, we can use canonical markers to match the unbiased clustering to known cell types:

# stash current cluster IDs
tiss <- StashIdent(object = tiss, save.name = "cluster.ids")
# enumerate current cluster IDs and the labels for them
cluster.ids <- c(0, 1, 2, 3, 4, 5, 6,7)
free_annotation <- c("DN4-DP in transition_Cd69 negative thymocytes", 
                     "DN4-DP in transition_Cd69 positive thymocytes",
                     "DN4-DP in transition_Cd69 positive thymocytes",
                     "DN4-DP in transition_Cd69 negative rapidly dividing thymocytes",
                     "DN4-DP in transition_Cd69 negative thymocytes",
                     "antigen presenting cell",
                     "DN4-DP in transition_Cd69 negative thyomcytes",
                     "DN1 thymocytes")
cell_ontology_class <-c("immature T cell",
                        "immature T cell",
                        "immature T cell",
                        "immature T cell",
                        "immature T cell",
                        "professional antigen presenting cell",
                        "immature T cell",
                        "DN1 thymic pro-T cell")
tiss@meta.data[,'free_annotation'] <- plyr::mapvalues(x = tiss@meta.data$cluster.ids, from = cluster.ids, to = free_annotation)
stash_annotations(tiss, cluster.ids, free_annotation, cell_ontology_class)

Save the Robject for later

When you save the annotated tissue, please give it a name.

filename = here('00_data_ingest', '04_tissue_robj_generated', 
                     paste0("facs_", tissue_of_interest, "_seurat_tiss.Robj"))
print(filename)
[1] "/Users/josh/src/tabula-muris/00_data_ingest/04_tissue_robj_generated/facs_Thymus_seurat_tiss.Robj"
save(tiss, file=filename)

Export the final metadata

filename = here('00_data_ingest', '03_tissue_annotation_csv', 
                     paste0(tissue_of_interest, "_facs", "_annotation.csv"))
write.csv(FetchData(tiss, c('plate.barcode','cell_ontology_class', 'free_annotation', 'tSNE_1', 'tSNE_2')), file=filename)

Figures for Supplement

LS0tCnRpdGxlOiAiVGh5bXVzIGZhY3MgTm90ZWJvb2siCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KClNwZWNpZnkgdGhlIHRpc3N1ZSBvZiBpbnRlcmVzdCwgcnVuIHRoZSBib2lsZXJwbGF0ZSBjb2RlIHdoaWNoIHNldHMgdXAgdGhlIGZ1bmN0aW9ucyBhbmQgZW52aXJvbm1lbnQsIGxvYWQgdGhlIHRpc3N1ZSBvYmplY3QuCgpgYGB7cn0KdGlzc3VlX29mX2ludGVyZXN0ID0gIlRoeW11cyIKbGlicmFyeShoZXJlKQpzb3VyY2UoaGVyZSgiMDBfZGF0YV9pbmdlc3QiLCAiMDJfdGlzc3VlX2FuYWx5c2lzX3JtZCIsICJib2lsZXJwbGF0ZS5SIikpCnRpc3MgPC0gbG9hZF90aXNzdWVfZmFjcyh0aXNzdWVfb2ZfaW50ZXJlc3QpCmBgYAoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTh9ClBDSGVhdG1hcChvYmplY3QgPSB0aXNzLCBwYy51c2UgPSAxOjMsIGNlbGxzLnVzZSA9IDUwMCwgZG8uYmFsYW5jZWQgPSBUUlVFLCBsYWJlbC5jb2x1bW5zID0gRkFMU0UsIG51bS5nZW5lcyA9IDgpCmBgYAoKYGBge3J9ClBDRWxib3dQbG90KG9iamVjdCA9IHRpc3MpCmBgYAoKYGBge3J9CiMgU2V0IG51bWJlciBvZiBwcmluY2lwYWwgY29tcG9uZW50cy4gCm4ucGNzID0gMTMKYGBgCgpgYGB7cn0KIyBTZXQgcmVzb2x1dGlvbiAKcmVzLnVzZWQgPC0gMC43Cgp0aXNzIDwtIEZpbmRDbHVzdGVycyhvYmplY3QgPSB0aXNzLCByZWR1Y3Rpb24udHlwZSA9ICJwY2EiLCBkaW1zLnVzZSA9IDE6bi5wY3MsIAogICAgcmVzb2x1dGlvbiA9IHJlcy51c2VkLCBwcmludC5vdXRwdXQgPSAwLCBzYXZlLlNOTiA9IFRSVUUpCmBgYAoKYGBge3J9CnRpc3MgPC0gUnVuVFNORShvYmplY3QgPSB0aXNzLCBkaW1zLnVzZSA9IDE6bi5wY3MsIHNlZWQudXNlID0gMTAsIHBlcnBsZXhpdHk9MzApCmBgYAoKYGBge3J9CiMgbm90ZSB0aGF0IHlvdSBjYW4gc2V0IGRvLmxhYmVsPVQgdG8gaGVscCBsYWJlbCBpbmRpdmlkdWFsIGNsdXN0ZXJzClRTTkVQbG90KG9iamVjdCA9IHRpc3MsIGRvLmxhYmVsID0gVCkKYGBgCgpgYGB7cn0KIyBCYXRjaCBhbmQgYW5pbWFsIGVmZmVjdHMKVFNORVBsb3Qob2JqZWN0ID0gdGlzcywgZG8ucmV0dXJuID0gVFJVRSwgZ3JvdXAuYnkgPSAicGxhdGUuYmFyY29kZSIpClRTTkVQbG90KG9iamVjdCA9IHRpc3MsIGRvLnJldHVybiA9IFRSVUUsIGdyb3VwLmJ5ID0gIm1vdXNlLmlkIikKYGBgCgpDaGVjayBleHByZXNzaW9uIG9mIGdlbmVzIG9mIGludGVyc2V0LgoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9MTIsIGZpZy53aWR0aD04fQpnZW5lc190b19jaGVjayA9IGMoJ1ZpbScsJ0tydDUnLCdLcnQ4JywnUHRwcmMnLCdFcGNhbScsJ0gyLUFiMScsJ0gyLUFhJywnQ2QzZScsJ0NkM2QnLCdDZDNnJywnQ2Q0JywnQ2Q4YScsJ0NkOGIxJywnRXRzMScsJ0NkNDQnLCdJbDJyYScsICdUb3AyYScsJ0NkNjknLCdSYWcxJywnUmFnMicsJ0RudHQnKQpGZWF0dXJlUGxvdCh0aXNzLCBnZW5lc190b19jaGVjaywgcHQuc2l6ZSA9IDEsIG5Db2wgPSAzKQpgYGAKCkRvdHBsb3RzIGxldCB5b3Ugc2VlIHRoZSBpbnRlbnNpdHkgb2YgZXhwcmVzc2lvbiBhbmQgdGhlIGZyYWN0aW9uIG9mIGNlbGxzIGV4cHJlc3NpbmcgZm9yIGVhY2ggb2YgeW91ciBnZW5lcyBvZiBpbnRlcmVzdC4KCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTEyLCBmaWcud2lkdGg9OH0KIyBUbyBjaGFuZ2UgdGhlIHktYXhpcyB0byBzaG93IHJhdyBjb3VudHMsIGFkZCB1c2UucmF3ID0gVC4KI0RvdFBsb3QodGlzcywgZ2VuZXNfdG9fY2hlY2ssIGNvbC5tYXggPSAyLjUsIHBsb3QubGVnZW5kID0gVCwgZG8ucmV0dXJuID0gVCkgKyBjb29yZF9mbGlwKCkKVmxuUGxvdCh0aXNzLCBnZW5lc190b19jaGVjaykKYGBgCgpIb3cgYmlnIGFyZSB0aGUgY2x1c3RlcnM/CmBgYHtyfQp0YWJsZSh0aXNzQGlkZW50KQpgYGAKCldoaWNoIG1hcmtlcnMgaWRlbnRpZnkgYSBzcGVjaWZpYyBjbHVzdGVyPwpgYGB7cn0KI2NsdXN0Lm1hcmtlcnMgPC0gRmluZE1hcmtlcnMob2JqZWN0ID0gdGlzcywgaWRlbnQuMSA9IDMsIG9ubHkucG9zID0gVFJVRSwgbWluLnBjdCA9IDAuMjUsIHRocmVzaC51c2UgPSAwLjI1KQojcHJpbnQoeCA9IGhlYWQoeD0gY2x1c3QubWFya2VycywgbiA9IDEwKSkKYGBgCgojIyBBc3NpZ25pbmcgY2VsbCB0eXBlIGlkZW50aXR5IHRvIGNsdXN0ZXJzCgpBdCBhIGNvYXJzZSBsZXZlbCwgd2UgY2FuIHVzZSBjYW5vbmljYWwgbWFya2VycyB0byBtYXRjaCB0aGUgdW5iaWFzZWQgY2x1c3RlcmluZyB0byBrbm93biBjZWxsIHR5cGVzOgoKYGBge3J9CiMgc3Rhc2ggY3VycmVudCBjbHVzdGVyIElEcwp0aXNzIDwtIFN0YXNoSWRlbnQob2JqZWN0ID0gdGlzcywgc2F2ZS5uYW1lID0gImNsdXN0ZXIuaWRzIikKCiMgZW51bWVyYXRlIGN1cnJlbnQgY2x1c3RlciBJRHMgYW5kIHRoZSBsYWJlbHMgZm9yIHRoZW0KY2x1c3Rlci5pZHMgPC0gYygwLCAxLCAyLCAzLCA0LCA1LCA2LDcpCmZyZWVfYW5ub3RhdGlvbiA8LSBjKCJETjQtRFAgaW4gdHJhbnNpdGlvbl9DZDY5IG5lZ2F0aXZlIHRoeW1vY3l0ZXMiLCAKICAgICAgICAgICAgICAgICAgICAgIkRONC1EUCBpbiB0cmFuc2l0aW9uX0NkNjkgcG9zaXRpdmUgdGh5bW9jeXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICJETjQtRFAgaW4gdHJhbnNpdGlvbl9DZDY5IHBvc2l0aXZlIHRoeW1vY3l0ZXMiLAogICAgICAgICAgICAgICAgICAgICAiRE40LURQIGluIHRyYW5zaXRpb25fQ2Q2OSBuZWdhdGl2ZSByYXBpZGx5IGRpdmlkaW5nIHRoeW1vY3l0ZXMiLAogICAgICAgICAgICAgICAgICAgICAiRE40LURQIGluIHRyYW5zaXRpb25fQ2Q2OSBuZWdhdGl2ZSB0aHltb2N5dGVzIiwKICAgICAgICAgICAgICAgICAgICAgImFudGlnZW4gcHJlc2VudGluZyBjZWxsIiwKICAgICAgICAgICAgICAgICAgICAgIkRONC1EUCBpbiB0cmFuc2l0aW9uX0NkNjkgbmVnYXRpdmUgdGh5b21jeXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICJETjEgdGh5bW9jeXRlcyIpCgpjZWxsX29udG9sb2d5X2NsYXNzIDwtYygiaW1tYXR1cmUgVCBjZWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgImltbWF0dXJlIFQgY2VsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJpbW1hdHVyZSBUIGNlbGwiLAogICAgICAgICAgICAgICAgICAgICAgICAiaW1tYXR1cmUgVCBjZWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgImltbWF0dXJlIFQgY2VsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJwcm9mZXNzaW9uYWwgYW50aWdlbiBwcmVzZW50aW5nIGNlbGwiLAogICAgICAgICAgICAgICAgICAgICAgICAiaW1tYXR1cmUgVCBjZWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgIkROMSB0aHltaWMgcHJvLVQgY2VsbCIpCgp0aXNzQG1ldGEuZGF0YVssJ2ZyZWVfYW5ub3RhdGlvbiddIDwtIHBseXI6Om1hcHZhbHVlcyh4ID0gdGlzc0BtZXRhLmRhdGEkY2x1c3Rlci5pZHMsIGZyb20gPSBjbHVzdGVyLmlkcywgdG8gPSBmcmVlX2Fubm90YXRpb24pCnN0YXNoX2Fubm90YXRpb25zKHRpc3MsIGNsdXN0ZXIuaWRzLCBmcmVlX2Fubm90YXRpb24sIGNlbGxfb250b2xvZ3lfY2xhc3MpCmBgYAoKYGBge3J9ClRTTkVQbG90KG9iamVjdCA9IHRpc3MsIGRvLmxhYmVsID0gVFJVRSwgcHQuc2l6ZSA9IDAuNSwgZ3JvdXAuYnk9J2ZyZWVfYW5ub3RhdGlvbicpCmBgYAoKIyBTYXZlIHRoZSBSb2JqZWN0IGZvciBsYXRlcgpXaGVuIHlvdSBzYXZlIHRoZSBhbm5vdGF0ZWQgdGlzc3VlLCBwbGVhc2UgZ2l2ZSBpdCBhIG5hbWUuCgpgYGB7cn0KZmlsZW5hbWUgPSBoZXJlKCcwMF9kYXRhX2luZ2VzdCcsICcwNF90aXNzdWVfcm9ial9nZW5lcmF0ZWQnLCAKICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKCJmYWNzXyIsIHRpc3N1ZV9vZl9pbnRlcmVzdCwgIl9zZXVyYXRfdGlzcy5Sb2JqIikpCnByaW50KGZpbGVuYW1lKQpzYXZlKHRpc3MsIGZpbGU9ZmlsZW5hbWUpCmBgYAoKYGBge3J9CiMgVG8gcmVsb2FkIGEgc2F2ZWQgb2JqZWN0CiMgZmlsZW5hbWUgPSBoZXJlKCcwMF9kYXRhX2luZ2VzdCcsICcwNF90aXNzdWVfcm9ial9nZW5lcmF0ZWQnLCAKIyAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoImZhY3MiLCB0aXNzdWVfb2ZfaW50ZXJlc3QsICJfc2V1cmF0X3Rpc3MuUm9iaiIpKQojIGxvYWQoZmlsZT1maWxlbmFtZSkKYGBgCgojIEV4cG9ydCB0aGUgZmluYWwgbWV0YWRhdGEKCmBgYHtyfQpoZWFkKHRpc3NAbWV0YS5kYXRhKQpgYGAKCmBgYHtyfQpmaWxlbmFtZSA9IGhlcmUoJzAwX2RhdGFfaW5nZXN0JywgJzAzX3Rpc3N1ZV9hbm5vdGF0aW9uX2NzdicsIAogICAgICAgICAgICAgICAgICAgICBwYXN0ZTAodGlzc3VlX29mX2ludGVyZXN0LCAiX2ZhY3MiLCAiX2Fubm90YXRpb24uY3N2IikpCndyaXRlLmNzdihGZXRjaERhdGEodGlzcywgYygncGxhdGUuYmFyY29kZScsJ2NlbGxfb250b2xvZ3lfY2xhc3MnLCAnZnJlZV9hbm5vdGF0aW9uJywgJ3RTTkVfMScsICd0U05FXzInKSksIGZpbGU9ZmlsZW5hbWUpCmBgYAoKIyBGaWd1cmVzIGZvciBTdXBwbGVtZW50Cgo=